__blockObjective-C 中的关键字究竟是什么意思?我知道它允许您修改块内的变量,但我想知道......
__block
它告诉编译器,任何由它标记的变量在块内使用时都必须以特殊方式处理。通常,块中也使用的变量及其内容会被复制,因此对这些变量所做的任何修改都不会显示在块之外。当它们被标记时__block,在块内完成的修改在块外也可见。
有关示例和更多信息,请参阅Apple 的 块编程主题中 的 __block 存储类型。 __
重要的例子是这个:
extern NSInteger CounterGlobal; static NSInteger CounterStatic; { NSInteger localCounter = 42; __block char localCharacter; void (^aBlock)(void) = ^(void) { ++CounterGlobal; ++CounterStatic; CounterGlobal = localCounter; // localCounter fixed at block creation localCharacter = 'a'; // sets localCharacter in enclosing scope }; ++localCounter; // unseen by the block localCharacter = 'b'; aBlock(); // execute the block // localCharacter now 'a' }
在此示例中,在调用块之前修改localCounter和。但是,在块内部,由于关键字localCharacter,只有对的修改可见。相反,块可以修改,并且这种修改在块外是可见的。localCharacter``__block``localCharacter
localCounter
localCharacter
localCharacter``__block``localCharacter